package com.hsurosy.hsuchain.nft.order.domain.listener.config;

import com.google.common.util.concurrent.ThreadFactoryBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.EnableAsync;

import java.util.concurrent.*;

/**
 * 订单监听器的线程池配置类
 *
 * @Author Hsu琛君珩
 * @Date 2024-10-05 17:10
 * @Description
 * @Version: v1.0.0
 */
@Configuration
@EnableAsync
public class OrderListenerConfig {

    /**
     * 配置订单监听器的线程池执行器
     * <p>
     * 该方法创建了一个自定义的线程池，用于订单监听相关的异步任务。
     * 线程池的核心线程数为 10，最大线程数为 20，使用 `LinkedBlockingQueue` 进行任务的队列管理。
     *
     * @return Executor 用于订单监听的线程池执行器
     */
    @Bean("orderListenExecutor")
    public Executor orderListenExecutor() {

        // 创建线程工厂，为线程池中的线程命名为 "orderListener-<threadNumber>"
        ThreadFactory namedThreadFactory = new ThreadFactoryBuilder()
                .setNameFormat("orderListener-%d").build();

        // 创建线程池执行器，核心线程数为 10，最大线程数为 20，任务队列容量为 1024
        ExecutorService executorService = new ThreadPoolExecutor(10, 20,
                0L, TimeUnit.MILLISECONDS,
                new LinkedBlockingQueue<>(1024), namedThreadFactory, new ThreadPoolExecutor.AbortPolicy());

        return executorService;
    }
}
